package cn.jbooter.mq.autoconfigure.rocketmq.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
import org.springframework.stereotype.Component;

import cn.jbooter.mq.autoconfigure.rocketmq.consts.RocketMQConstants;
import cn.jbooter.mq.autoconfigure.rocketmq.enu.RocketConsumeMode;


/**
 * rocketmq 消费者自动装配
 * @author HeJian
 *
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface RocketConsumer {

	/**
	 * name server addr, 优先使用此参数,若此参数为空,则使用配置参数
	 * @return
	 */
	String namesrvAddr() default "";
	
	/**
	 * 消费者组,默认使用DEFAULT_CONSUMER消费者组
	 * @return
	 */
	String consumerGroup() default RocketMQConstants._DEFAULT_CONSUMER_GROUP;
	
	/**
	 * 消息模式:默认:MessageModel.CLUSTERING
	 * 
	 * 广播模式消费： MessageModel.BROADCASTING
	 * 集群模式消费： MessageModel.CLUSTERING
	 * @return
	 */
	MessageModel messageModel() default MessageModel.CLUSTERING;
	
	/**
	 * 消费者订阅的topic
	 * @return
	 */
	String topic();
	
	/**
	 * 消息的tag,默认:*; 如果有多个会以 || 连接, 如: tagA||tagB||tagC
	 * @return
	 */
	String[] tag() default {"*"};
	
	/**
	 * 消费模式:默认:CONCURRENTLY 无序消费
	 * 
     * 乱序消费:(使用线程池并发消费: CONCURRENTLY("CONCURRENTLY")),
     * 顺序消费(单线程消费: ORDERLY("ORDERLY"))
     * @return 
     */
	RocketConsumeMode consumeMode() default RocketConsumeMode.CONCURRENTLY;
	
	
}
